✅deck (Anki)とnote type (Anki)の設定をtable記法ではなくJSONにしたい
Scrapboxを使ったAnkiデータ構築案1とScrapboxを使ったAnkiデータ構築案:穴埋め特化verでは、deck (Anki)とnote type (Anki)の指定にtable記法を用いた
なぜtable記法にしたかは覚えていないtakker.icon
たしか、アイコン記法を使ってなにかを示したかったからだったかな
井戸端の方に書いたはずなので、いずれ参照する
しかし、tableをparseするよりJSONをparseするほうがやりやすいので、そっちにしたい
現状のdeck, note typeの型定義に会うようにJSONを設定する
ていうか、型定義をそのまま使えばいいか
型定義はdeno-ankiで定義されている
https://code2svg.vercel.app/svg/L9-15/https://raw.githubusercontent.com/takker99/deno-anki/master/mod.ts#.svg https://github.com/takker99/deno-anki/blob/master/mod.ts#L9-L15
https://code2svg.vercel.app/svg/L28-43/https://raw.githubusercontent.com/takker99/deno-anki/master/mod.ts#.svg https://github.com/takker99/deno-anki/blob/master/mod.ts#L28-L43
https://code2svg.vercel.app/svg/L45-51/https://raw.githubusercontent.com/takker99/deno-anki/master/mod.ts#.svg https://github.com/takker99/deno-anki/blob/master/mod.ts#L45-L51
https://code2svg.vercel.app/svg/L53-58/https://raw.githubusercontent.com/takker99/deno-anki/master/mod.ts#.svg https://github.com/takker99/deno-anki/blob/master/mod.ts#L53-L58
案
deck (Anki)
updated以外を書くだけ
code:deck.json
{
"id": 44845749858349584,
"name": "system-english",
"description": "システム英単語系の問題集"
}
note type (Anki)
cssとlatex以外はすべて型定義どおりにJSONをコードブロックに書く
code:notetype.json
{
"id": 343480954545,
"name": "システム英単語用穴埋め問題",
"isCloze": true,
"fields": "Text", "Description", "SourceURL",
}
cssはcode:cssに、latexはpre.texとpost.texに書く
code:css
.card {
display: flex;
justify-content: center;
font-family: arial;
font-size: 20px;
color: black;
background-color: white;
}
.cloze {
font-weight: bold;
color: blue;
}
.nightMode .cloze {
color: lightblue;
}
template (Anki)も別のcode blockに書くか?
複数のtemplateを指定できるから、ややこしくなりそう
まあcode:name.answer.htmlみたくすれば区別できるが……exampleの指定が難しくなる
exampleは指定できなくてもいいか。
code:Card 1.question.html
{{cloze:Text}}
{{type:Text}}
code:Card 1.answer.html
{{cloze:Text}}
<hr>
<a href="{{SourceURL}}">source</a>
note (Anki)
hash tagは本文から削り、tagに追加する
それ以外はHTMLに変換する
→✅field (Anki)をScrapbox記法で書く (scrapbox2anki)
fieldsを任意に変更したので、field (Anki)の記法を作り直さなければならない
❌:guid.Title.note
中心にfield nameを入れる
:guidとの境界がわからないのでパス
✅:guid.note.Title
末尾にfield nameを入れる
:guid.note(Title)
カッコも有りだが……カーソルを当てないとカッコ内が隠れてしまうから、視認性のために避けるべき
field nameの入っていないコードブロックは、fields先頭のfieldの値とみなす
これは後方互換性も兼ねている
(2023-09-01)しまった。これだとどこのfieldsからtagを抽出するか特定できないtakker.icon
→✅field (Anki)をScrapbox記法で書く (scrapbox2anki)
scrapbox記法でparseした全てのfieldsから取り出すことにすればいいや
実装
現在
(deck|note type)が書き込まれたページを構文解析してデータを取得する
変更後
api/code/:projectname/:pagetitle/:filenameから直接JSONを取得する
この場合parseDeckなどが不要になる
更新日時を取得したいので、引き続きLine[]からデータを取り出そう
テストデータ
Scrapboxを使ったAnkiデータ構築案2:note type
2023-09-01
13:17:40 merged
conflictが発生し、mergeするまでにすこし手こずった
12:52:07 テスト完了
default deckとnote typeが使われる
ここは✅deck/note typeが指定されていない問題は除外するで仕様変更する
note typeにあるがnoteにないfieldは、空文字が挿入される
JSONを読み込めている
console.warn()で読み込みエラーが出る
本当はalertで出したいところ
12:22:32 ここまででテストしたい
12:15:34 mod.tsのエラー取りまでやった
makeApkgの設計が微妙
変換したいpagesは外部から入れているのに、deckとnoteTypeの読み込みは自分でfetchしてしまっている
deckとnoteTypeの読み込み先も外部から注入したい
2つの引数を用意すればいい
notesを抽出したいページのリスト
任意のpagesにrandom accessできる函数
別のPRで出そう
⬜makeApkgからデータ読み込み機能を分離する
2023-08-31
14:46:17 微修正
sb2md.tsを全ての記法にとりあえず対応した
deck.tsの微修正
14:46:59 noteType.tsもjson読み込みに移行する
15:00になったら、別のタスクを優先してやる
15:37:42 テスト開始
テスト用jsonデータを作成する
16:15:37 無職転生 ~異世界行ったら本気だす~を少し見直してた
16:43:22 noteType.ts修正完了
テストはまだ不十分
あとはnote.tsをやればおわり
2023-08-30
22:04:47 terminalがcrashしてしまった
pushしてなかったのがつらい
なんとかwindows環境から抜き出せないか試してみる
2023-07-31
11:11:36 commitした
11:05:14 deck.tsの変更完了
テストはまだ足りなそう
#scrapbox2anki
#2023-09-01 11:43:58
#2023-08-31 15:39:16
#2023-08-30 22:06:07
#2023-07-31 10:17:28
#2023-06-26 11:03:04